package com.orangeforms.webadmin.nop;

import com.orangeforms.common.core.object.TokenData;
import io.nop.api.core.auth.IUserContext;
import io.nop.api.core.context.ContextProvider;
import io.nop.api.core.context.IContext;
import io.nop.api.core.convert.ConvertHelper;
import io.nop.auth.core.login.UserContextImpl;
import io.nop.commons.util.StringHelper;

public class AuthHelper {
    public static IUserContext newUserContext(TokenData tokenData) {
        UserContextImpl userContext = new UserContextImpl();
        userContext.setUserId(String.valueOf(tokenData.getUserId()));
        userContext.setUserName(tokenData.getLoginName());
        userContext.setNickName(tokenData.getShowName());
        userContext.setAccessToken(tokenData.getUaaAccessToken());
        userContext.setSessionId(tokenData.getSessionId());
        userContext.setTenantId(StringHelper.toString(tokenData.getTenantId(), null));
        userContext.setRoles(ConvertHelper.toCsvSet(tokenData.getRoleIds()));
        userContext.setDeptName(tokenData.getDeptName());
        userContext.setDeptId(StringHelper.toString(tokenData.getDeptId(), null));
        return userContext;
    }

    public static void bindUserContext(TokenData tokenData) {
        IUserContext userContext = newUserContext(tokenData);
        IUserContext.set(userContext);
        IContext context = ContextProvider.getOrCreateContext();
        context.setUserId(userContext.getUserId());
        context.setUserName(userContext.getUserName());
        context.setTenantId(userContext.getTenantId());
    }

    public static void unbindUserContext() {
        IContext context = ContextProvider.currentContext();
        if (context != null)
            context.close();
    }
}
